// 基本类型  number string boolean undefined null void never any unknown
// 数组类型 Array<类型> / 类型 []
// 函数的类型
// function 函数名(参数 : 参数类型) : 返回值类型 {
//   return 10
// }

// 可变参数
function resetArgs(...reset: number[]) {}

resetArgs(1, 2, 3, 4);

// 对象的类型
let obj: { username: string };

// 函数 参数 对象  {age:number} 返回值 也是一个对象 {age:number}

// : 后面的都是类型
// 类型 变量

// 创建类型
// ts 有一个关键字 type : 创建类型的关键字
type Person = { age: number; username: string };
type ArrayPerson = Array<Person>;
// type 类型的名字 = 类型
// 注意 类型的首字母 大写
// type : 类型别名
function getObj(params: Person): ArrayPerson {
  return [{ age: 10, username: "zhangsan" }];
}

// 函数

// 类型 函数类型 参数 : Person  返回值 Person的数组

// 写一个函数 参数 对象 {key : Person}  返回值 [{key:Person},{key : Person}]

// type FnArgs =

// type FnObj = {
//   fn : FnArgs
// }

type KeyPerson = { key: Person };

function getKeyPerson(params: KeyPerson): Array<KeyPerson> {
  return [params, { key: { age: 10, username: "zhangsan" } }]; // 返回一个符合类型的值
}

// : 类型
// type interface enum  操作 | & ? as typeof